import cv2
import numpy as np
from PyQt5.QtGui import QPixmap, QImage


'''
创建 camera类对象完成摄像头操作
    __init__函数完成摄像头的配置
'''
class camera():
    # 1、打开摄像头
    def __init__(self):
        # VideoCapture类对摄像头或调用摄像头进行读取操作
        # 0表示打开默认摄像头
        self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
        # 定义一个多维数组，用于存储画面数据
        self.currentframe = np.array([])

    # 2、读取摄像头数据
    def read_camera(self):
        ret, frame = self.cap.read()
        if not ret:
            print("获取摄像头失败！")
            return None
        return frame

    # 3、把数据转换成界面能显示的数据格式
    def camera_toPic(self):
        frame = self.read_camera()
        # 摄像头图片BGR，需转为为RGB
        self.currentframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # 转换成界面能显示的格式
        # a.获取画面的宽高
        height, width = self.currentframe.shape[:2]
        # b.创建Qimage类对象(使用摄像头画面数据)
        img = QImage(self.currentframe, width, height, QImage.Format_RGB888)
        qpixmap = QPixmap.fromImage(img)
        return qpixmap

    # 关闭摄像头
    def camera_close(self):
        # 释放VideoCapture 对象
        self.cap.release()
